package org.leetcode.easy;


import org.junit.Test;

//389. 找不同
public class FindTheDifference {
    private char findTheDifference(String s, String t) {
        int arr[] = new int[26];
        // 将s字符串中的字符遍历并在数组中计数。
        for (int i = 0; i < s.length(); i++) {
            int num = s.charAt(i);
            // 减去97，是因为字母a的ASCII码是97
            arr[num - 97]++;
        }
        // 遍历t字符串，将t字符串中的字符在数组中计数，此时和s字符串相同的字符个数是偶数。
        for (int i = 0; i < t.length(); i++) {
            int num = t.charAt(i);
            arr[num - 97]++;
        }
        int j;
        for (j = 0; j < arr.length; j++) {
            // 因为t是s的重新排列之后又加的一个字符，所以奇数个的就一定是这个字符
            if (arr[j] % 2 == 1) {
                break;
            }
        }
        return (char) (j + 97);
    }

    // 计数方法进阶版
    public char findTheDifferenceTwo(String s, String t) {
        int[] cnt = new int[26];
        for (int i = 0; i < s.length(); ++i) {
            char ch = s.charAt(i);
            cnt[ch - 'a']++;
        }
        for (int i = 0; i < t.length(); ++i) {
            char ch = t.charAt(i);
            cnt[ch - 'a']--;
            if (cnt[ch - 'a'] < 0) {
                return ch;
            }
        }
        return ' ';
    }
    // 求和方法
    public char findTheDifferenceThree(String s, String t) {
        int as = 0, at = 0;
        for (int i = 0; i < s.length(); ++i) {
            as += s.charAt(i);
        }
        for (int i = 0; i < t.length(); ++i) {
            at += t.charAt(i);
        }
        return (char) (at - as);
    }


    @Test
    public void test() {
        String s = "abcd";
        String t = "abcde";
        System.out.println(findTheDifference(s, t));
    }
}
